import type {Settings as LayoutSettings} from '@ant-design/pro-layout';
import {SettingDrawer} from '@ant-design/pro-layout';
import {PageLoading} from '@ant-design/pro-layout';
import type {RunTimeLayoutConfig} from 'umi';
import { history} from 'umi';
import RightContent from '@/components/RightContent';
import Footer from '@/components/Footer';

import _request from '@/utils/request';
import DefaultSettings from "../config/defaultSettings";
import {LoginUser} from "@/services/system/login/types";
import {getUserInfo} from "@/services/system/user/api";
// import LoadingComponent from "@ant-design/pro-layout/es/PageLoading";
// import {getRoutes} from "@/services/system/menu/api";

// const isDev = process.env.NODE_ENV === 'development';
const loginPath = '/user/login';

/** 获取用户信息比较慢的时候会展示一个 loading */
export const initialStateConfig = {
  loading: <PageLoading/>,
};
export const request = _request;

/**
 * @see  https://umijs.org/zh-CN/plugins/plugin-initial-state
 * */
export async function getInitialState(): Promise<{
  settings?: Partial<LayoutSettings>;
  currentUser?: LoginUser;
  loading?: boolean;
  fetchUserInfo?: () => Promise<LoginUser | undefined>;
}> {
  const fetchUserInfo = async () => {
    try {
      const result = await getUserInfo();
      return result.data;
    } catch (error) {
      history.push(loginPath);
    }
    return undefined;
  };
  // 如果不是登录页面，执行
  if (history.location.pathname !== loginPath) {
    const currentUser = await fetchUserInfo();
    return {
      fetchUserInfo,
      currentUser,
      settings: DefaultSettings,
    };
  }
  return {
    fetchUserInfo,
    settings: DefaultSettings,
  };
}

// let extraRoutes: any = [];
//
// // @ts-ignore
// export function patchRoutes({routes}) {
//   getRoute(extraRoutes, routes)
//   extraRoutes.forEach(item => {
//     routes[0].routes.push(item)
//   })
//   console.log(routes)
//
// }


// eslint-disable-next-line @typescript-eslint/no-unused-vars
// const getRoute = (extraRoutes, routes) => {
//   if (!Array.isArray(extraRoutes)) return [];
//   return extraRoutes.map((item: any) => {
//     if (item.component) {
//       item.componentPath = dynamic({ loader: () => import(`@/pages${item.componentPath}/index.tsx`), loading: LoadingComponent})
//     }
//     if (item.routes) {
//       item.routes = getRoute(item.routes, routes);
//     }
//     return item;
//   })
// }
//
// //
// export function render(oldRender: () => void) {
//   getRoutes().then(res => {
//     extraRoutes = res.data;
//     oldRender();
//   })
// }

// const routes = getRoutes().then(res => res.data)
// ProLayout 支持的api https://procomponents.ant.design/components/layout
export const layout: RunTimeLayoutConfig = ({initialState, setInitialState}) => {
    return {
      rightContentRender: () => <RightContent/>,
      disableContentMargin: false,
      footerRender: () => <Footer/>,
      onPageChange: () => {
        const {location} = history;
        // 如果没有登录，重定向到 login
        if (!initialState?.currentUser && location.pathname !== loginPath) {
          history.push(loginPath);
        }
      },
      links: [],
      menu: {
        locale: false,
        // params: initialState?.currentUser,
        // request(params, defaultMenuData) {
        //   // console.log(defaultMenuData)
        //   // require()
        //   return getRoutes().then(res => {
        //     return [...defaultMenuData, ...res.data]
        //   })
        //   // return defaultMenuData;
        // },
      },
      breadcrumbRender: (routers = []) => [
        {
          path: '/',
          breadcrumbName: '首页',
        },
        ...routers,
      ],
      menuHeaderRender: undefined,
      pageTitleRender: false,
      // 自定义 403 页面
      // unAccessible: <div>unAccessible</div>,
      // 增加一个 loading 的状态
      childrenRender: (children, props) => {
        // if (initialState?.loading) return <PageLoading />;
        return (
          <>
            {children}
            {!props.location?.pathname?.includes('/login') && (
              <SettingDrawer
                disableUrlParams
                enableDarkTheme
                settings={initialState?.settings}
                onSettingChange={(settings) => {
                  setInitialState((preInitialState) => ({
                    ...preInitialState,
                    settings,
                  }));
                }}
              />
            )}
          </>
        );
      },
      ...initialState?.settings,
    }
      ;
  }
;
